#include <bits/stdc++.h>
#define int long long 
using namespace std;
const int maxn = 1005;
int n, m, k;
int a, b, c, d;

int arr[maxn][maxn];

int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
int dp[maxn][maxn][2];
bool legal(int x, int y){
	return x >=1 && x <= n && y >= 1 && y <= m;
}

bool dfs(int x, int y, int f){
	if (x==c&&y==d) {
		// 能通过
		return dp[x][y][f] = true;
	}
	if (dp[x][y][f] != -1) {
		return dp[x][y][f];
	}
	for (int i=0;i<4;i++) {
		int nx = x + dx[i];
		int ny = y + dy[i];
		if (!legal(nx, ny)) {
			continue;
		}
		// 使用背包
		if (arr[nx][ny] >= arr[x][y]) {
			if (f == 0 && arr[x][y]+k > arr[nx][ny]) {
				// 没有使用过且用过足够高才能使用
				if(dfs(nx, ny, 1)) return dp[x][y][f] = true;
			}
		} else {
			// 不使用背包
			if(dfs(nx, ny, f)) return dp[x][y][f]=true;
		}
	}
	return dp[x][y][f]=false;
}

void solve(){
	memset(dp, -1, sizeof(dp));
	cin >> n >> m >> k;
	cin >> a >> b >> c >> d;
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=m;j++) {
			cin >> arr[i][j];
		}
	}
	cout << (dfs(a, b, 0)?"Yes":"No") << '\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
